home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- # Firewalling script
-
- [ "$1" = start -o "$1" = restart -o "$1" = newip ] || exit
-
- . /etc/system.cfg
- . /etc/colors
- . /etc/chat.pwd
- . /etc/live.cfg
-
- Pd=deny # default policy - deny or reject
- Pa=accept
- Pl=$Pa
- I=ipfwadm
- E=echo
-
- for i in 0 1 2 3 4 5 6 7 8 9; do
- neti=`eval '$E $NETWORK'$i`
- netm=`eval '$E $NETMASK'$i`
- [ "$neti" ] && export "NET$i"=$neti/$netm
- modi=`eval '$E $MADDR'$i`
- [ "$modi" ] && export "MOD$i"=$modi
- done
- [ "$USEDHCP0" = y -a "$NET0" = "" ] && export NET0="90.0.0.0"
- [ "$TRUSTLN" = n ] && Pl=$Pd # local net policy
- Pm=$Pl
- [ "$TRUSTMD" = n ] && Pm=$Pd # modem policy
- rin() {
- [ "$1" -a "$2" ] || return
- $I -I -a $Pa -W $1 -D 255.255.255.255
- if [ "$TRUSTLN" = y ]; then
- $I -I -a $Pa -W $1
- else
- $I -I -a $Pa -W $1 -S $2
- $I -I -a $Pd -S $2 $LG
- fi
- }
- din() {
- [ "$1" ] || return
- $I -I -a $Pd -D $1 $LG
- $I -I -a $Pd -S $1 $LG
- }
- cfw() {
- [ "$2" -a "$3" ] || return
- $I -F -a $1 -S $2 -D $3
- $I -F -a $1 -S $3 -D $2
- }
- ban() {
- j=$1
- for i in `cat /etc/banlist.cfg | sed 's/\#.*//;s/$/\ /'`; do
- set -- `$E $i | sed s/,/\ /g`
- [ "$j$1" = ll ] && $I -F -a $Pd -S $2
- if [ "$j$1" = ee ]; then
- $I -I -a $Pd -D $2
- $I -I -a $Pd -S $2
- fi
- done
- }
- msq() {
- [ "$2" ] || return
- $I -F -a masquerad -W $1 -S $2
- }
- export INET=ppp0; [ "$ROUTER" = ethernet -a "0$USEPPP0" != 0y ] && export INET=$INTNAME0
- if [ "$ENAMSQ" = y ]; then
- $E -n "Enabling NAT and firewalling... "
- $I -I -f
- $I -I -p $Pd
- $I -O -f
- $I -O -p $Pa
- $I -F -f
- $I -F -p $Pd
- [ "$LOGFIRE" = n ] || LG="-o"
- for FILE in /rc/rc_user /pkg/rc/rc_*; do
- ls $FILE >/dev/null 2>/dev/null && $FILE firewall
- done
- $I -I -a $Pa -W lo
- ban e
- for i in 0 1 2 3 4 5 6 7 8 9; do
- [ `eval '$E $MOD'$i` ] && $I -I -a $Pa -V "1.1.1.`expr $i + 1`"
- done
- [ "$ROUTER" = ethernet -a "0$USEPPP0" != 0y ] || rin $INTNAME0 $NET0
- for i in 1 2 3 4 5 6 7 8 9; do
- rin `eval '$E $INTNAME'$i` `eval '$E $NET'$i`
- done
- if [ "$ENAPING" != y ]; then
- [ "$ENAPING" = s ] && $I -I -a $Pa -P icmp -S 0/0 0
- $I -I -a $Pd -P icmp -S 0/0 # Block external pings
- fi
- if [ "$ENADNS" = s ]; then
- if [ "$DNSADDR" ]; then
- $I -I -a $Pa -P tcp -S $DNSADDR 53 # open ISP primary DNS
- $I -I -a $Pa -P udp -S $DNSADDR 53
- else
- $E -n "${CR}No DNS IP "
- fi
- if [ "$DNSADDR1" ]; then
- $I -I -a $Pa -P tcp -S $DNSADDR1 53 # open ISP secondary DNS
- $I -I -a $Pa -P udp -S $DNSADDR1 53
- fi
- $I -I -a $Pd -P tcp -D 0/0 53 $LG # block the rest
- $I -I -a $Pd -P udp -D 0/0 53 $LG
- fi
- [ "$ENATEL" = s ] && $I -I -a $Pd -P tcp -D 0/0 23 $LG # telnet
- [ "$ENAID" = s ] && $I -I -a $Pd -P tcp -D 0/0 113 $LG # ident
- if [ "$ENALPD" = s ]; then
- for i in 0 1 2 3 4; do
- LP=`eval '$E $LPPORT'$i`
- [ "$LP" = "" ] || $I -I -a $Pd -P tcp -D 0/0 $LP $LG
- done
- fi
- [ "$ENAWWW" = s ] && $I -I -a $Pd -P tcp -D 0/0 $WWWPORT $LG # Public HTTP server
- [ "$ENAWWA" = s ] && $I -I -a $Pd -P tcp -D 0/0 $WWAPORT $LG # Control HTTP server
- [ "$ENAFTP" = s ] && $I -I -a $Pd -P tcp -D 0/0 $FTPPORT $LG # FTP server
- [ "$USEDHCP0" = y ] || $I -I -a $Pd -P udp -D 0/0 67:68 # block dhcp
- $I -I -a $Pd -P udp -D 0/0 514 $LG # block syslog
- [ "$ROUTER" = ethernet -a "0$USEPPP0" != 0y ] || din $NET0
- for i in 0 1 2 3 4 5 6 7 8 9; do
- [ "$i" = 0 ] || din `eval '$E $NET'$i`
- din `eval '$E $MOD'$i`
- done
- $I -I -a $Pa
- $I -M -s 7200 10 60 # Timeouts TCP, after TCP, UDP
- for i in 1 2 3 4 5 6 7 8; do
- for o in 2 3 4 5 6 7 8 9; do
- if [ "$i" -lt "$o" ]; then
- cfw $Pl `eval '$E $NET'$i` `eval '$E $NET'$o`
- cfw $Pm `eval '$E $NET'$i` `eval '$E $MOD'$o`
- cfw $Pm `eval '$E $MOD'$i` `eval '$E $MOD'$o`
- fi
- done
- done
- if [ "$ROUTER" = ethernet ]; then
- cfw $Pm $NET1 $MOD0
- cfw $Pm $MOD1 $MOD0
- fi
- cfw $Pm $NET1 $MOD1
- if [ "$ROUTER" = ethernet -a "0$USEPPP0" != 0y ]; then
- ban l
- for i in 0 1 2 3 4 5 6 7 8 9; do
- [ "$i" = 0 ] || msq $INTNAME0 `eval '$E $NET'$i`
- msq $INTNAME0 `eval '$E $MOD'$i`
- done
- else
- for i in 0 1 2 3 4 5 6 7 8 9; do
- [ "$i" = 0 ] || cfw $Pl $NET0 `eval '$E $NET'$i`
- cfw $Pm $NET0 `eval '$E $MOD'$i`
- done
- ban l
- fi
- if [ "$ROUTER" = ethernet ]; then
- $I -F -a masquerad -V 1.1.1.1
- else
- $I -F -a masquerad -S $NET0
- fi
- for i in 1 2 3 4 5 6 7 8 9; do
- [ `eval '$E $MOD'$i` ] && $I -F -a masquerad -V "1.1.1.`expr $i + 1`"
- [ `eval '$E $NET'$i` ] && $I -F -a masquerad -S `eval '$E $NET'$i`
- done
- else
- $E -n "${CM}NAT and firewalling are disabled...$CW "
- $I -I -f
- $I -I -p $Pa
- $I -O -f
- $I -O -p $Pa
- $I -F -f
- $I -F -p $Pa
- fi
- if [ "$NET0" = "90.0.0.0" ]; then
- $E "${CR}Failed$CW /$CY Delayed$CW"
- else
- =
- fi
-